home *** CD-ROM | disk | FTP | other *** search
/ The Best of MacTutor - S…e Code for Volumes 1 to 5 / The Best of MacTutor - Source Code for Volume 1-5 (Wayzata Technology)(6031)(1990).bin / Source Code / #45 (Jun 89) / Supe SubCode / TrapHook.c < prev    next >
C/C++ Source or Header  |  1989-02-19  |  1KB  |  57 lines

  1. #include "TrapHook.h"
  2. #include <Memory.h>
  3. #include <Menus.h>
  4. #include <strings.h>
  5. #include <OSUtils.h>
  6.  
  7. #define                            DrawCharNum    0x083
  8.  
  9. extern long                        InsertHookAddr;
  10.  
  11. /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
  12.  
  13. SetupHook(InfoFunc,HookFunc,TrapNum,HookAddr,NormalTrap)
  14.     int                    (*InfoFunc)();
  15.     long                    HookFunc;
  16.     int                    TrapNum;
  17.     TrapHookPointer    *HookAddr;
  18.     long                    *NormalTrap;
  19. {    
  20.     int            ParamsSize;
  21.     int            CodeSize;
  22.     long            CodeAddr;
  23.     THz            OldZone;
  24.     
  25.     (*InfoFunc)(&CodeAddr,&CodeSize,&ParamsSize);
  26.     
  27.     /*  MAKE SURE TRAP HOOK IS IN SYS HEAP... */
  28.     OldZone = GetZone();
  29.     SetZone (SystemZone());
  30.     *HookAddr = (TrapHookPointer)NewPtr(ParamsSize + CodeSize);
  31.     SetZone (OldZone);
  32.     
  33.     *NormalTrap                        = GetTrapAddress(TrapNum);
  34.     (**HookAddr).FuncAddress    = HookFunc;
  35.     (**HookAddr).TrapAddress    = *NormalTrap;
  36.     (**HookAddr).HookCallLevel    = 0;
  37.     BlockMove((Ptr)CodeAddr,(Ptr)&((**HookAddr).Code),CodeSize);
  38.     
  39.     SetTrapAddress((long)&((**HookAddr).Code),TrapNum);
  40. }
  41.  
  42. /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
  43.  
  44. UnsetTrapHook(HookAddr)
  45.     TrapHookPointer    HookAddr;
  46. {    
  47.     int    CodeSize;
  48.     long    CodeAddr;
  49.  
  50.     UnChainHook(&CodeAddr,&CodeSize);
  51.         
  52.     BlockMove((Ptr)CodeAddr,(Ptr)&(HookAddr->Code),CodeSize);
  53. }
  54.  
  55. /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */
  56.  
  57.